<?php

declare(strict_types=1);

use function Hyperf\Support\env;

return [
    'default' => [
        'driver' => env('DB_DRIVER', 'mysql'),
        'host' => env('DB_HOST'),
        'database' => env('DB_DATABASE'),
        'port' => env('DB_PORT', 3306),
        'username' => env('DB_USERNAME'),
        'password' => env('DB_PASSWORD'),
        'charset' => env('DB_CHARSET', 'utf8mb4'),
        'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
        'prefix' => env('DB_PREFIX'),
        /**
         * 高并发场景：
         * 'min_connections' => 5,  // 保持更多的最小连接数
         * 'max_connections' => 50,  // 提供较高的最大连接数应对高并发
         * 'connect_timeout' => 5.0,  // 缩短连接超时时间，提高敏感性
         * 'wait_timeout' => 5.0,  // 允许更长的等待时间
         * 'heartbeat' => 30,  // 开启心跳检测，防止连接断开
         * 'max_idle_time' => 120,  // 延长空闲时间，避免频繁重连
         *
         * 低频访问场景：
         * 'min_connections' => 1,  // 最小连接数设置为1，节省资源
         * 'max_connections' => 10,  // 最大连接数保持较低
         * 'connect_timeout' => 10.0,  // 连接超时保持默认
         * 'wait_timeout' => 3.0,  // 等待时间适当即可
         * 'heartbeat' => -1,  // 心跳检测可以关闭
         * 'max_idle_time' => 60,  // 默认空闲时间
         */
        'pool' => [
            /**
             * 作用：表示连接池中最少的活跃连接数。
             * 默认值：1
             * 说明：当数据库服务启动时，连接池会保持至少 min_connections 个连接处于活跃状态，
             *      即使没有实际查询操作。这个设置适合高频繁的数据库访问场景，可以避免在请求高峰期频繁创建连接。
             * 建议：如果系统访问频率较高，建议设置较大一些。否则，较小的值可以减少资源消耗。
             */
            'min_connections' => 1,
            /**
             * 作用：连接池中允许的最大数据库连接数。
             * 默认值：10
             * 说明：当连接池中的连接数达到 max_connections 时，如果有新的连接请求，系统会等待连接池中有空闲连接才能继续。
             *      如果设置过小，可能导致连接不足，应用程序性能下降。如果设置过大，可能浪费资源，增加数据库服务器负载。
             * 建议：根据实际并发请求的数量进行设置。高并发系统可适当增加该值。
             */
            'max_connections' => 10,
            /**
             * 作用：表示连接数据库的超时时间，单位为秒。
             * 默认值：10.0
             * 说明：如果数据库在指定时间内没有响应连接请求，系统将认为连接超时并抛出异常。
             *      如果数据库服务器稳定，设置一个较低的超时时间有助于更快发现连接问题。
             * 建议：保持默认值或根据网络环境适当调整。如果网络延迟较高，可以适当增加超时时间。
             */
            'connect_timeout' => 10.0,
            /**
             * 作用：当连接池中没有空闲连接时，系统会等待一定时间（单位：秒），如果超过这个时间还没有空闲连接，系统会抛出异常。
             * 默认值：3.0
             * 说明：在高并发情况下，如果连接池中没有可用连接，应用程序会等待指定的时间，看是否有空闲连接释放出来。
             *      如果等待超过该时间，程序将报错。
             * 建议：根据并发情况适当调整。如果应用程序负载较高，适当增加该值以减少等待连接不足的问题。
             */
            'wait_timeout' => 3.0,
            /**
             * 作用：控制数据库连接的心跳检查频率，单位为秒。
             * 默认值：-1 （表示关闭心跳检测）
             * 说明：心跳检测用于检查连接是否存活，特别是在使用长时间不活跃的连接时。
             *      如果设置为正值，系统会周期性地向数据库发送心跳包，检查连接状态，防止连接因为长时间空闲而被断开。
             * 建议：如果你的数据库可能断开空闲连接，建议设置一个合理的心跳间隔时间（比如 60 秒）。
             */
            'heartbeat' => -1,
            /**
             * 作用：控制数据库连接的最大空闲时间，单位为秒。
             * 默认值：60
             * 说明：连接在空闲超过 max_idle_time 后将被关闭，防止过多的空闲连接占用资源。
             *      这是一个用来节省数据库资源的设置，特别是系统长时间没有请求时。
             * 建议：根据实际情况调整。如果系统有较长的空闲期，适当减少该值以节省资源。
             *      如果系统需要快速响应，可以增加该值，减少频繁创建连接的开销。
             */
            'max_idle_time' => (float)env('DB_MAX_IDLE_TIME', 60),
        ],
        'commands' => [
            'gen:model' => [
                'path' => 'app/Model',
                'force_casts' => true,
                'inheritance' => 'Model',
            ],
        ],
    ],
];
